#pragma once
#include "Estruturas.h"
#include "Utilitarios.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


Individuo lerIndividuoArquivo(FILE *file,char *valido){
  Individuo individuo;
  individuo.idIndividuo = lerInteiroArquivo(file);
  individuo.idEspecie = lerInteiroArquivo(file);
  individuo.sexo = lerCharArquivo(file);
  *valido = lerCharArquivo(file);
  return individuo;
}

void gravaIndividuoArquivo(FILE *file, Individuo individuo){
  fseek(file,0,SEEK_END); 
  gravarInteiroArquivo(individuo.idIndividuo,file);
  gravarInteiroArquivo(individuo.idEspecie,file);
  gravarCharArquivo(individuo.sexo, file);
  gravarCharArquivo('1', file);
}

int sizeofIndividuoEmDisco(){
  return 10; // quantidade ocupada pelo registro
}

Individuo lerIndividuoID(FILE *file, int idIndividuo){
  fseek(file,0,SEEK_END);
  int tamanhoArquivo = ftell(file);
    
  char valido;
  Individuo individuo;
  
  if (idIndividuo*sizeofIndividuoEmDisco() > tamanhoArquivo){
    individuo.idIndividuo = -1;
    return individuo;
  }
  
  fseek(file,idIndividuo*sizeofIndividuoEmDisco(),SEEK_SET); 
  individuo = lerIndividuoArquivo(file,&valido);  
  
  if (valido == '0'){
    individuo.idIndividuo = -1;
  }
  return individuo;
}

int removeIndividuoID(FILE *file, int idIndividuo){
  fseek(file,0,SEEK_SET);   
  Individuo individuo = lerIndividuoID(file, idIndividuo);
  if (individuo.idIndividuo == -1){
    return 0;
  }
  fseek(file,-1,SEEK_CUR);
  gravarCharArquivo('0',file);  
  return 1;
}

int novoIDIndividuo(){
    static int id = 0;
    return id++;
}

void escreveArquivoIndividuo(FILE *file){
  int idInd = novoIDIndividuo();
  int idEspecie;
  Individuo novoIndividuo;
  char sexo[2];

  printf("\nDigite o id da especie: ");
  scanf("%d", &idEspecie);

  printf("\nDigite o sexo M ou F: ");
  scanf("%s",sexo);
    
  novoIndividuo.idIndividuo = idInd;
  novoIndividuo.idEspecie = idEspecie;
  novoIndividuo.sexo = sexo[0];

  gravaIndividuoArquivo(file,novoIndividuo);  
  
}


//Funcao de teste
void lerArquivoIndividuo(){
  char valido = 1;
  FILE *file = fopen("individuos.txt","r");
  Individuo individuo1 = lerIndividuoArquivo(file, &valido);
  Individuo individuo2 = lerIndividuoArquivo(file, &valido);
  printf("Id %d - Sexo: %c\n", individuo1.idIndividuo, individuo1.sexo);
  printf("Id %d - Sexo: %c\n", individuo2.idIndividuo, individuo2.sexo);
}

//Funcao de teste
void buscaArquivoIndividuo(){
  FILE *file = fopen("individuos.txt","r");
  Individuo individuo2 = lerIndividuoID(file,1);
  if(individuo2.idIndividuo != -1){
    printf("Id %d - Sexo: %c\n", individuo2.idIndividuo, individuo2.sexo);
  }else{
    printf("Individuo não encontrada.\n");
  }  
}

//Funcao de teste
void removeIndividuo(){
  FILE *file = fopen("individuos.txt","rw+");    
  if (removeIndividuoID(file,1)) {
    printf("Removido com sucesso\n");
  }else{
    printf("Não Removido\n");
  }
  fclose(file);
}

/*int main(){
  escreveArquivo();
  lerArquivo();
  removeIndividuo();
  buscaArquivo();
}*/


























